package com.cat.recruit.service;

import com.cat.recruit.common.result.Result;
import com.cat.recruit.config.JwtUserDetails;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import org.springframework.stereotype.Service;


public interface AdminService {

    /**
     * 管理员提交分数
     * @param accessId 考核ID
     * @param score 分数
     * @param comment 评论
     * @return 提交结果
     */
    Result submitScore(Integer accessId, Integer score, String comment, JwtUserDetails jwtUserDetails);

    /**
     * 管理员登录
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    Result login(String username, String password);

    /**
     * 获取报名列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 报名列表
     */
    Result getApplyList(Integer pageNum, Integer pageSize,String status,String direction);


    /**
     *
     * @param accessType 考核类型
     * @param direction  方向
     * @param interviewNumber 人数上限
     * @param appointmentDate 日期
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 设置结果
     */
    Result addAppointmentTime(String accessType, String direction, Integer interviewNumber, String appointmentDate, String startTime, String endTime);

    /**
     * 管理员获取预约时间列表
     */
    Result getAppointmentTimeList();

    /**
     * 管理员获取用户信息
     * @param userId 用户ID
     * @return 用户信息
     */
    Result getUserInfo(Integer userId);


    /**
     * 管理员设置招聘状态
     * @param status 状态
     * @return 设置结果
     */
    Result setRecruitStatus(String status);

    /**
     * 根据预约时间获取用户
     * @return 用户列表
     */
    Result getUsersByAppointmentTime(Integer appointmentSlotId);

    /**
     * 管理员获取用户得分
     * @param userId 用户ID
     * @return 用户得分
     */
    Result getScore(Integer userId);

    /**
     * 删除预约时间
     * @param appointmentSlotId 预约时间ID
     * @return 删除结果
     */
    Result deleteAppointmentSlot(Integer appointmentSlotId);

    Result updateAppointmentSlot(Integer id, String accessType, String direction, String appointmentDate, String startTime,String endTime, Integer capacity);

    Result updateUserStatus( Integer userId, String status);

    Result generateAccess(String accessType);
}
